package com.website.dayouziblog.utils;

import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 日期工具类
 */
public class TimeUtil {

    /**
     * 格式化日期
     * @param date
     * @return
     */
    public static String getDateTime(Date date){
        SimpleDateFormat temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return temp.format(date);
    }

    /**
     * 万能时间格式提取+转换,任意格式时间都可以提取出标准的yyyy-MM-dd
     *
     * @param time
     * @return
     */
    public static String getTimeFromString(String time) {
        Pattern p = Pattern.compile("\\d{4}(-|\\/|\\\\|\\.|年)\\d{1,2}(-|\\/|\\\\|\\.|月)\\d{1,2}");
        Matcher m = p.matcher(time);
        if (m.find()) {
            return setCorrectTime(formatTime(m.group()));
        }
        return "";
    }

    /**
     * 将初步得到的时间字符串中的非数字统统转换为-
     *
     * @param time
     * @return
     */
    private static String formatTime(String time) {
        Pattern p = Pattern.compile("[^0-9]");
        Matcher m = p.matcher(time);
        while (m.find()) {
            time = time.replace(m.group(), "-");
        }
        return time;
    }

    /**
     * 传入已经初步格式化之后的时间字符串,格式可能为yyyy-M-dd或是yyyy-MM-d或是yyyy-MM-dd,在这里统一转化为yyyy-MM-dd
     *
     * @param time
     * @return
     */
    private static String setCorrectTime(String time) {
        String[] temps = time.split("-");
        String year = temps[0];     //年份
        String month = temps[1].length() == 1 ? "0" + temps[1] : temps[1];   //月份
        String day = temps[2].length() == 1 ? "0" + temps[2] : temps[2];     //天数
        return year + "-" + month + "-" + day;
    }


    /**
     * 传入的时间戳为字符串类型，时间戳转换成yyyy-MM-dd格式
     * @param time
     * @return
     */
    public static String timeStampToDate(String time){
        Long timeLong = Long.valueOf(time);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//这里可以自定义转换后的格式
        String result = sdf.format(new Date(timeLong));
        return getTimeFromString(result);//最后再用万能时间转换器处理一下
    }

    /**
     * 传入的时间格式为yyyy-MM-dd HH:mm:ss，转换成时间戳格式
     * @param date
     * @return
     */
    public static String dateTotimeStamp(String date){
        String result = "";
        try {
            long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
            result = String.valueOf(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }

}
